home *** CD-ROM | disk | FTP | other *** search
/ BCI NET / BCI NET Dec 94.iso / archives / programming / languages / brainfuck-2.lha / bfc.asm next >
Encoding:
Assembly Source File  |  1993-06-09  |  1.8 KB  |  151 lines

  1.     EXEOBJ
  2.     OUTPUT    bfc
  3.  
  4. OBJSIZE    EQU    65536
  5. CODSIZE    EQU    32000
  6.  
  7. read    EQU    -$2a
  8. write    EQU    -$30
  9. input    EQU    -$36
  10. output    EQU    -$3c
  11. closlib EQU    -$19e
  12.  
  13. ; d0
  14. ; d1   len
  15. ; d2
  16. ; d3   1
  17. ; d4   byte
  18. ; d5   offset
  19. ; d6   
  20. ; d7
  21.  
  22. ; a0
  23. ; a1
  24. ; a2   stack
  25. ; a3   cdptr
  26. ; a4   4
  27. ; a5   code
  28. ; a6
  29.  
  30.  
  31. initcode:
  32.     dc.l    $3f3,0,1,0,0,OBJSIZE/4-9,$3e9,OBJSIZE/4-9
  33.  
  34.     lea    (CODSIZE,pc),a5
  35.     moveq    #4,d0
  36.     move.l    d0,a4
  37.     move.l    (a4),a6
  38.     jsr    -810(a6)
  39.     move.l    d0,a6
  40.     moveq    #1,d3
  41. initcode2:
  42.  
  43.  
  44.  
  45. clrmem
  46.     move.l    a5,a2
  47.     moveq    #-1,d5
  48. ..    clr.b    (a2)+
  49.     dbra    d5,..
  50.     move.w    #$3f2,-(a2)
  51.     move.l    a5,a2
  52.  
  53.  
  54.  
  55.     move.b    d3,(a5)
  56. mainloop
  57.     move.b    (a5),d4
  58.     lea    (code,pc),a3
  59.  
  60. ..    move.b    (a3)+,d5
  61.     move.b    (a3)+,d1
  62.     cmp.b    (a3)+,d4
  63.     blo.b    ..
  64.     bne.b    advance
  65.     add.l    d5,a3
  66.  
  67. copy    move.b    (a3)+,(a5)+
  68.     subq.b    #1,d1
  69.     bne.b    copy
  70.  
  71.     addq.b    #8,d5
  72.     bcc.s    noloop
  73.     move.l    a5,-(a2)
  74. noloop
  75.  
  76.     addq.b    #3,d5
  77.     bne.s    noendl
  78.     move.l    (a2)+,a0
  79.     move.l    a0,d0
  80.     sub.l    a5,d0
  81.     move.w    d0,(a5)+
  82.     neg.w    d0
  83.     subq.w    #4,d0
  84.     move.w    d0,-(a0)
  85. noendl
  86.  
  87.  
  88. advance
  89.     clr.b    (a5)
  90. readbyte
  91.     jsr    input(a6)
  92.     move.l    d0,d1
  93.      move.l    a5,d2
  94.     jsr    read(a6)
  95. readbyte2
  96.  
  97.     tst.b    d4
  98.     bne.s    mainloop
  99.  
  100.     move.l    a2,a5
  101.     swap    d3
  102. writebyte
  103.     jsr    output(a6)
  104.     move.l    d0,d1
  105.     move.l    a5,d2
  106.     jsr    write(a6)
  107. writebyte2
  108.  
  109. cleanup
  110.     move.l    a6,a1
  111.     move.l    (a4),a6
  112.     jsr    closlib(a6)
  113.     moveq    #0,d0
  114.     rts
  115. cleanup2
  116.  
  117. rightcode:
  118.     addq.l    #1,a5
  119. leftcode:
  120.     subq.l    #1,a5
  121.  
  122. endwcode
  123. addcode:
  124.     addq.b    #1,(a5)
  125. subcode:
  126.     subq.b    #1,(a5)
  127.     dc.w    $6600
  128. endwcode2
  129.  
  130. whilecode:
  131.     dc.w    $6000
  132. whilecode2
  133.  
  134. code:
  135. endw:    dc.b    endwcode-endw-3,6,']'
  136. while:    dc.b    whilecode-while-3,4,'['
  137. right:    dc.b    rightcode-right-3,2,'>'
  138. left:    dc.b    leftcode-left-3,2,'<'
  139.  
  140. out:    dc.b    writebyte-out-3,writebyte2-writebyte,'.'
  141. sub:    dc.b    subcode-sub-3,2,'-'
  142. in:    dc.b    readbyte-in-3,readbyte2-readbyte,','
  143. add:    dc.b    addcode-add-3,2,'+'
  144.  
  145. beg:    dc.b    (initcode-beg-3)&$FF,initcode2-initcode,1
  146. end:    dc.b    cleanup-end-3,cleanup2-cleanup,0
  147.  
  148.     dx.b    OBJSIZE+CODSIZE
  149.  
  150.     END
  151.